package br.com.pnfp.web.control.actions.cadastros;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.pnfp.web.control.actions.DefaultAction;
import br.com.pnfp.web.control.forms.cadastros.CadastroDoadorForm;
import br.com.pnfp.web.model.enums.UF;
import br.com.pnfp.web.model.vo.Cidade;
import br.com.pnfp.web.model.vo.Doador;
import br.com.pnfp.web.model.vo.Entidade;
import br.com.pnfp.web.model.vo.Localidade;
import br.com.pnfp.web.model.vo.RamoAtividade;

public class CadastroDoadorAction extends DefaultAction {
	
	private static final Logger logger = Logger.getLogger(CadastroDoadorAction.class); 
	
	public ActionForward iniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		return mapping.findForward("body");
	}
	
	public ActionForward consultar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroDoadorForm doadorForm = (CadastroDoadorForm) form;
		consultar(doadorForm, request);
		
		return mapping.findForward("body");
	}
	
	public ActionForward incluir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroDoadorForm doadorForm = (CadastroDoadorForm) form;
		Doador vo = new Doador();
		vo.setCnpj(doadorForm.getCnpj());
		vo.setRazaoSocial(doadorForm.getRazaoSocial());
		vo.setRamoAtividade(new RamoAtividade(doadorForm.getRamoAtividade()));
		vo.setLocalidade(new Localidade(doadorForm.getLocalidade()));
		vo.setUsuarioSistema(getUsuario(request));
		getDoadorDAO().incluir(vo);
		
		return null;
	}	
	
	public ActionForward alterarIniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroDoadorForm doadorForm = (CadastroDoadorForm) form;
		Doador vo = new Doador();
		vo.setCodigo(doadorForm.getIdSelecionado());
		vo.setUsuarioSistema(getUsuario(request));
		
		List<Doador> lista = getDoadorDAO().consultar(vo);
		 
		vo = lista.get(0);
		printJsonObjectToStream(vo, response);
		
		return null;
	}	
	
	public ActionForward alterar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroDoadorForm doadorForm = (CadastroDoadorForm) form;
		Doador vo = new Doador();
		vo.setCodigo(doadorForm.getIdSelecionado());
		vo.setCnpj(doadorForm.getCnpj());
		vo.setRazaoSocial(doadorForm.getRazaoSocial());
		vo.setRamoAtividade(new RamoAtividade(doadorForm.getRamoAtividade()));
		vo.setLocalidade(new Localidade(doadorForm.getLocalidade()));
		vo.setUsuarioSistema(getUsuario(request));
		getDoadorDAO().alterar(vo);
		
		return null;
	}
	
	public ActionForward excluir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroDoadorForm doadorForm = (CadastroDoadorForm) form;
		getDoadorDAO().excluir(doadorForm.getIdSelecionado());
		
		return mapping.findForward("body");
	}
	
	public ActionForward verificaCNPJ(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroDoadorForm doadorForm = (CadastroDoadorForm) form;
		Doador vo = new Doador();
		vo.setCnpj(doadorForm.getCnpj());
		vo.setUsuarioSistema(getUsuario(request));
		
		List<Doador> lista = getDoadorDAO().consultar(vo);
		if(lista.size() > 0) {
			printJsonObjectToStream(lista.get(0), response);
		} else {
			printJsonObjectToStream(new Doador(), response);
		}
		
		return null;
	}

	public ActionForward ajaxListar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		Doador doador = new Doador();
		doador.setUsuarioSistema(getUsuario(request));
		List<Doador> result = getDoadorDAO().consultar(doador);
		
		printJsonObjectToStream(result, response);
		
		return null;
	}
	
	private void consultar(CadastroDoadorForm doadorForm, HttpServletRequest request) {
		
		Doador vo = new Doador();
		vo.setCnpj(doadorForm.getCnpjConsultar());
		vo.setRazaoSocial(doadorForm.getRazaoSocialConsultar());
		if(doadorForm.getRamoAtividadeConsultar() != null) {
			vo.setRamoAtividade(new RamoAtividade(doadorForm.getRamoAtividadeConsultar()));
		}
		
		if(doadorForm.getEntidadeConsultar() != null && doadorForm.getEntidadeConsultar() > 0) {
			vo.setEntidade(new Entidade(doadorForm.getEntidadeConsultar()));
		}
		
		if(!doadorForm.getUfConsultar().equals("")) {
			vo.setLocalidade(new Localidade());
			vo.getLocalidade().setCidade(new Cidade(UF.valueOf(doadorForm.getUfConsultar())));
		}
		vo.setUsuarioSistema(getUsuario(request));
		
		List<Doador> listaResultado = getDoadorDAO().consultar(vo);
		request.setAttribute("listaResultado", listaResultado);
		request.setAttribute("contador", listaResultado.size());
	}
}
